import * as Cesium from 'cesium/Build/Cesium/Cesium'
import 'cesium/Build/Cesium/Widgets/widgets.css'

export class CesiumJsUtil {
  constructor () {
  }

  /**
   * Cesium初始化
   * @param data
   * @param callback
   */
  init (data, callback) {
    data = data || {}
    this.params = data.params

    const containerId = this.params.containerId
    var defaultOption = {
      animation: false, // 是否显示动画控件
      baseLayerPicker: false, // 是否显示图层选择控件
      homeButton: true, // 是否显示home控件
      geocoder: true, // 是否显示地名查找控件
      timeline: false, // 是否显示时间线控件
      sceneModePicker: false, // 是否显示投影方式控件
      navigationHelpButton: false, // 是否显示帮助信息控件
      infoBox: true, // 是否显示点击要素之后显示的信息
      fullscreenButton: false, // 是否显示全屏控件
      vrButton: false, // 是否显示vr控件
      selectionIndicator: true, // 是否显示点击要素之后显示选中框
      useDefaultRenderLoop: true, // 是否使用默认的渲染循环
      animate: false,
      navigationInstructionsInitiallyVisible: false, // 是否导航指令是否初始可见
      allowTextureFilterAnisotropic: true, // 是否允许纹理过滤器各向异性
      contextOptions: {
        webgl: {
          alpha: false,
          antialias: true,
          preserveDrawingBuffer: true,
          failIfMajorPerformanceCaveat: false,
          depth: true,
          stencil: false,
          anialias: false
        }
      },
      targetFrameRate: 60, // 目标帧率
      resolutionScale: 0.1, // 分辨率比率
      orderIndependentTranslucency: true, // 顺序无关的透明度,
      automaticallyTrackDataSourceClocks: true, // 自动跟踪数据源时钟
      dataSources: null,
      clock: null,
      terrainShadows: Cesium.ShadowMode.DISABLED // 地形阴影
    }
    const option = this.params.option || defaultOption
    if (option !== defaultOption) {
      for ( var key in defaultOption) {
        if (!option.hasOwnProperty(key)) {
          option[key] = defaultOption[key]
        }
      }
    }
    const baseUrl = this.params.baseUrl
    if (baseUrl) Cesium.buildModuleUrl.setBaseUrl(baseUrl)

    this.viewer = new Cesium.Viewer(containerId, option)

    this.viewer.cesiumWidget.creditContainer.style.display = 'none' // 去除底部logo

    if (callback) callback(this.viewer)
  }
}
